// 复用性 不太好
// 类型约束 是 输入参数的类型和返回值类型一致
// 任何类型 类型参数 T
// function print(arg:string):string {
//     console.log(arg)
//     return arg
// }
// 联合类型
// function print(arg:string | number) : string | number {
//     console.log(arg)
//     return arg
// }
// function print(arg:any):any {
//     console.log(arg)
//     return arg
// }
// ts 减少js 的莫名其妙的bug
// const res:string = print(123)
// <>申明一个泛型 T 占位符 变量
function print<T> (arg:T):T {
    console.log(arg)
    return arg
}
const res:string = print<string>('123')
const res1:number = print<number>(123)
// type interface 自定义类型 
type Print = <T>(arg:T) => T
const printFn:Print = function print(arg) {
    return arg
}
